package com.wel.book.Utils;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;

import org.apache.commons.lang.StringUtils;

/**
 * 文件工具类
 * @author wel.xiao
 * 2013-4-9
 */
public class FileUtils {

	/**
	 * 读文件
	 * @param url 文件路径
	 * @return 文件内容
	 * @throws Exception 
	 */
	public static String readFile(String url){
		StringBuffer sb = new StringBuffer();
		try {
			BufferedReader br = new BufferedReader(new FileReader(url));
			String lineContent = null ;
			while( (lineContent = br.readLine()) != null){
				sb.append(lineContent);
			}
		} catch(Exception e) {
			e.printStackTrace();
			System.out.println("读取文件:"+url+"  时发生错误");
		}
		return sb.toString();
	}
	
	/**
	 * 写文件
	 * @param filePath 文件路径
	 * @param content 文件内容
	 * @param encoding 字符编码
	 * @throws IOException 
	 */
	// TODO 此方法因写在逻辑层
	public static void writeFile(String filePath, String content, String encoding) throws IOException {
		// 如果本地目录不存在 则创建目录
		createDir(filePath, true);
		PrintWriter pw = null;
		try {
			String strTarget = new String(content.getBytes(Charset
					.forName(encoding)), encoding);
			pw = new PrintWriter(filePath, encoding);
			pw.write(strTarget);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pw.flush();
			pw.close();
		}
	}
	
	/**
	 * 把网络图片写入本地
	 * @param networkUrl 网络路径
	 * @param localUrl 本地路径
	 * 2013年4月11日 00:31:13
	 */
	public static void writeImageToLocal(String networkUrl, String localUrl) {
		try {
			URL url = new URL(networkUrl);
			InputStream in = url.openStream();
			// 读取网络图片
			DataInputStream dis = new DataInputStream(in);
			// 如果本地目录不存在 则创建目录
			createDir(localUrl, true);
		    // 创建本地图片
		    FileOutputStream fos = new FileOutputStream(localUrl);
		    byte[] buffer = new byte[1024];
		    int length;
		    // 开始写入本地
		    while((length = dis.read(buffer))>0){
			    fos.write(buffer,0,length);
		    }
		    dis.close();
		    fos.close();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取文件扩展名
	 * @param fileName 文件名
	 * @return 文件扩展名
	 * 2013年4月11日 00:31:26
	 */
	public static String getExtensionName(String fileName) {   
	    if (StringUtils.isNotBlank(fileName)) {   
	        int dot = fileName.lastIndexOf('.');   
	        if ((dot >-1) && (dot < (fileName.length() - 1))) {   
	            return fileName.substring(dot + 1);   
	        }   
	    }   
	    return fileName;   
	}

	/**
	 * 创建目录 如果目录不存在则创建 如果目录存在则不创建
	 * @param filePath 文件路径
	 * @param isFile 路径类型 如果路径是文件则为true 如果路径是目录 则为false
	 */
	public static boolean createDir(String filePath, boolean isFile) {
		// 如果传过来的路径是文件 则把文件路径变成文件夹
		if(isFile) {
			int separator = filePath.lastIndexOf(File.separator);
			filePath = filePath.substring(0, separator);
		}
		File file = null;
		try {
			file = new File(filePath);
			if (!file.exists()) {
				return file.mkdirs();
			}
		} catch (RuntimeException e) {
			e.printStackTrace();
		} finally {
			file = null;
		}
		return false;
	}
	
}
